package cn.edu.nwpu.warehousemanagement.service;

import cn.edu.nwpu.warehousemanagement.pojo.Product;
import cn.edu.nwpu.warehousemanagement.pojo.Result;
import cn.edu.nwpu.warehousemanagement.pojo.dto.PageDTO;
import cn.edu.nwpu.warehousemanagement.pojo.dto.ProductStatisticsDTO;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 商品服务接口
 *
 * @author LSR
 */
public interface ProductService {
    /**
     * 创建商品
     *
     * @param product 商品实体
     * @return 操作结果
     */
    Result<Product> create(Product product);

    /**
     * 软删除商品（设置deleted为true）
     *
     * @param id 商品ID
     * @return 操作结果
     */
    Result<Void> delete(Long id);

    /**
     * 更新商品
     *
     * @param product 商品实体
     * @return 操作结果
     */
    Result<Product> update(Product product);

    /**
     * 根据ID获取未删除的商品
     *
     * @param id 商品ID
     * @return 操作结果
     */
    Result<Product> getById(Long id);

    /**
     * 根据名称获取未删除的商品
     *
     * @param name 商品名称
     * @return 操作结果
     */
    Result<List<Product>> getByName(String name);

    /**
     * 分页查询未删除的商品
     *
     * @param pageDTO 页码(从1开始)
     * @return 分页结果
     */
    Result<Page<Product>> listByPage(PageDTO pageDTO);

    /**
     * 按页返回所有未删除的Product
     *
     * @return 返回一个包含多个Page的List，每个Page包含20条Product
     */
    Result<List<Page<Product>>> getAllProductPages();

    /**
     * 获取一个包含所有未删除的Product的List
     *
     * @return 返回一个包含所有Product的List
     */
    Result<List<Product>> getAllProductList();


    /**
     * 获取Product统计信息
     * @return 含ProductStatisticsDTO统计信息
     */
    Result<ProductStatisticsDTO> getProductStatistics();

//    /**
//     * 异步获取产品库存统计信息（可选）
//     * @return 异步任务ID
//     */
//    Result<String> asyncGetProductStatistics();
}